#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
вид списка – односвязный 
тип данных – int

• +функция создания нового узла (с головы, с хвоста);
• функция удаления существующего узла (с головы, с хвоста);
• функция редактирования существующего узла (с головы, с хвоста);
• -вывод списка в консоль (с головы, с хвоста);
• функция заполнения списка N случайными числами;
• функция полной очистки занятых данных, которая должна вызываться 
    при выходе из программы.
*/

typedef struct s_list {
    int value;
    struct s_list *next;
} t_list;

t_list *create_node(int set_value) {
    t_list *node = (t_list *)malloc(sizeof(t_list));
    node -> value = set_value;
    node -> next = NULL;
    return node;
}

void print_list(t_list *list);
void push_front(t_list **list, int set_value);
void push_back(t_list **list, int set_value);
int count_list(t_list *list);
int random_generator();

int main() {
    //int ch = 0;
    t_list *list = create_node(1);
    print_list(list);
    push_front(&list, 4);
    print_list(list);
    push_back(&list, 3);
    print_list(list);
    printf("count list = %d", count_list(list));
    

    // while (ch != 0) {
    //     scanf("%d", ch);
    //     switch (ch)
    //     {
    //     case 0:
    //         break;
        
    //     default:
    //         break;
    //     }
    // }
    

}

void push_front(t_list **list, int set_value) {
    t_list *new_element = create_node(set_value);
    new_element -> next = *list;
    *list = new_element;
}

void push_back(t_list **list, int set_value) {
    t_list *new_element = create_node(set_value);
    t_list *tmp = *list;
    while (tmp -> next != NULL) {
        tmp = tmp -> next;
    }
    tmp -> next = new_element;    
}

void print_list(t_list *slist) {
    t_list *pointer_list = slist;
    while (pointer_list != NULL) {
        printf("%d\n", pointer_list -> value);
        pointer_list = pointer_list -> next;
    }
}

int count_list(t_list *slist) {
    int count_list = 0;
    t_list *list = slist;
    while (list != NULL) {
        list = list -> next;
        count_list++;
    }
    return count_list;    
}
// void print_list(int set_value) {
//     t_list *pointer = p_begin;
//     while (pointer != NULL) {
//         printf("%d\t", pointer -> value);
//         pointer = pointer -> next;
//     }
    
// }

// void printLinkedList(const Node *head) {
//     while (head) {
//         printf("%d ", head->value);
//         head = head->next;
//     }
//     printf("\n");
// }


int random_generator() {
    srand((unsigned) time(NULL));
    int Generate = rand() % 100;
    return Generate;
}